SELECT [DISTINCT {*|столбец [псевдоним], ..... }
FROM {таблица, ....... }
WHERE условие(я)
ORDER BY {столбец|выражение, .... } [ASC|DESC]
где,
* | -- означает выбор всех столбцов | |
DISTINCT | -- позволяет избежать дублирования строк | |
FROM | - (из) | -- задает список таблиц, из которых производится выборка |
WHERE | - (где) | -- задает ограничивающие условия |
AND / OR | - (и / или) | -- логические связки для объединения условий |
() | -- используются для явного задания порядка выполнения условий | |
ORDER BY | - (упорядочить по) | -- фраза всегда стоит последней в SELECT'е |
ASC / DESC | -- задают сортировку по возрастанию/убыванию |
Команда SQL должна заканчиваться символом "точка с запятой".
Замечание: Следует помнить, что результат сравнения во фразе WHERE может зависеть от типа данных. Например, идет поиск по имени 'SCOTT'. Для типа данных CHAR значения 'SCOTT' 'SCOTT ' совпадают, а для типа VARCHAR2 нет, так как поиск ведется по точному совпадению значений и пробелы справа не добавляются.
EXIT | -- выход из SQL*Plus |
DESC[RIBE] имя_таблицы | -- возвращает описание таблицы |
SAVE имя_файла | -- копирует буфер SQL в файл .SQL |
SAVE имя_файла APPEND | -- добавляет буфер SQL в существующий файл |
SAVE имя_файла REPLACE | -- пересоздает существующий файл .SQL |
GET имя_файла | -- копирует файл .SQL в буфер SQL |
START имя_файла | -- запускает командный файл |
ED имя_файла | -- запускает строчный редактор |
DEFINE_EDITOR=имя_ред | -- определение системного редактора |
BETWEEN | -- между |
AND | -- и |
IN (список) | -- в (списке) |
LIKE | -- как |
IS NULL | -- есть NULL |
Элементы (список) перечисляются через запятую.
Оператор LIKE позволяет искать значения по вхождению в них символа. Для задания шаблона поиска применяют два символа:
% -- означает любую последовательность символов, в том числе пустую;
_ -- точно один символ.
Если в поле нет значения, то оно считается пустым NULL.
Если в выражении хотя бы один из операндов не определен, то не определено все выражение.
Очень часто по смыслу задачи неопределенное значение можно при вычислениях заменить каким-то определенным значением.
Это позволяет сделать функция NVL, имеющая формат:
NVL(имя, значение)
Например, если комиссионные не назначены сотруднику, то их следует считать равными нулю. Поэтому при вычислениях со столбцом COMM следует использовать функцию NVL(COMM,0)
Синонимы имен позволяют дать выходным таблицам альтернативные заголовки, в том числе на русском языке. Синоним записывается через пробел после имени или выражения.
Синонимы могут быть введены только во фразе SELECT.
Допустима сортировка по нескольким столбцам, перечисляемым во фразе ORDER BY через запятую.
Если для некоторых столбцов необходимо задать обратный порядок сортировки, слово DESC записывают после имени соответствующего столбца через запятую.
Оператор конкатенации обозначаемый как || позволяет формировать символьные строки объединяя столбцы, арифметические выражения, константы и литералы.
Литерал -- любой набор букв, цифр, выражений, не содержащий имен столбцов и их синонимов.
Даты и символьные литералы берутся в одинарные кавычки.
1. Извлечем всю информацию из таблицы ЕМР (сотрудники).
SELЕСТ * FRОМ EMP;
И в окне SQL*Plus Вы должны получить следующие значения
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ------------------------------------------------------------------------------- 7639 SMITH CLERK 7902 13-JUN-83 800.00 20 7499 ALLEN SALESMAN 7698 15-AUG-83 1,600.00 300.00 30 7521 WARD SALESMAN 7698 26-МАР-84 1,250.00 500.00 30 7566 JONES MANAGER 7839 31-ОCТ-83 2,975.00 20 7654 МARTIN SALESMAN 7698 05-DEC-83 1,250.00 1.400.00 30 7698 BLAKE MANAGER 7839 11-JUN-84 2,850.00 30 7782 CLARK MANAGER 7839 14-MAY-84 2,450.00 10 7788 SCOTT ANALYST 7566 05-MAR-84 3,000.00 20 7839 КING PRESIDENT 09-JUL-84 5,000.00 10 7844 TURNER SALESMAN 7698 04-JUN-84 1,500.00 30 7876 ADAMS CLERK 7788 04-JUN-84 1,100.00 20 7900 JAMES CLERK 7698 23-JUL-84 950.00 30 7902 FORD ANALYST 7566 05-DEC-83 3,000.00 20 7934 MILLER CLERK 7782 21-NOV-83 1,300.00 10
2. Найдем всех сотрудников с окладом в интервале от 1000 до 2000, включительно.
SELЕСТ ENAME, DEPTNO, SAL FRОМ EMP WHERE SAL BETWEEN 1000 AND 2000;
ENANE DEPTNO SAL ------------------------------ ALLEN 30 1,600.00 WARD 30 1,250.00 MARTIN 30 1,250.00 TURNER 30 1,500.00 ADAMS 20 1,100.00 MILLER 10 1,300.00
3. Извлечем полную информацию о всех сотрудниках в отделах 10 и 20 так чтобы их фамилии шли в алфавитном порядке.
SELЕСТ * FRОМ EMP WHERE DEPTNO IN (10,20);
ЕМРNО ЕNАМЕ JOB MGR HIREDATE SAL CОММ DEPTNO --------------------------------------------------------------------------- 7876 ADANS CLERK 7788 04-JUN-84 1,100.00 20 7782 CLARC МANАGER 7839 24-MAY-84 2,450.00 10 7902 FORD ANALYST 7566 25-DEC-83 3,000.00 20 7566 JONES MANAGER 7839 31-OCТ-83 2,975.00 20 7839 KING PRESIDENT 09-JUL-84 5,000.00 10 7934 MILLER CLERK 7782 21-NOV-83 1,300.00 10 7783 SCOTT ANALYST 7566 05-МAR-84 3,000.00 20 7639 SNITH CLERС 7902 23-JUN-83 800.00 20
4. Выведем фамилии (ENAME) и полный годовой доход (RENUMERATION, то есть зарплата плюс комиссионные) всех сотрудников.
SELЕСТ ENAME, SAL * 12 + NVL(COMM,0) RENUMERATION FRОМ EMP;
ENAME RENUMERATION ------------------------ SMITH 9600 ALLEN 19500 WARD 15500 JONS 35700 MARTIN 16400 BLAKA 34200 CLARK 29400 SCOTT 36000 KING 60000 TURNER 18000 ADAMS 13200 JAMES 11400 FORD 36000 MILLER 15600
5. Выдадим фамилии (ENAME), годовую зарплату (ANNUAL_SAL) и комисионное вознаграждение (СОММ) всех продавцов (SALESMAN), у которых оклад превышает их комиссионные за месяц. Расположим их в порядке убывания окладов, Если встретится несколько сотрудников с одинаковым окладом они должны быть перечислены в алфавитном порядке.
SELЕСТ ENAME, SAL * 12 ANNUAL_SAL, СОММ FRОМ EMP WHERE SAL > COMM AND JOB = 'SALESHAN' ORDER BY SAL, DESC, ENANE;
ENAME ANNUAL_SAL COMM ------------------------------------- ALLEN 19200 300.00 TURNER 18000 .00 WARD 15000 500.00
6. Выдадим данные в отформатированном виде.
SELЕСТ ENAME || 'HAS HELD ТНЕ POSITION OF '|| JOB|| ' IN DEPT ' || DEPTNO || ' SINCE '|| HIREDATE " Who, whаt and when" FRОМ EMP;
Who, what and when -------------------------------------------------------------------------------------------------------------------------- SMITH HAS HELD THE POSITION OF CLERK IN DEPT 20 SINCE 13-JUN-83 ALLEN HAS HELD THE POSITION OF SALESMAN IN DEPT 3O SINCE 15-AUG-83 WARD HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 26-MAR-84 JONS HAS HELD THE POSITION OF MANAGER IN DEPT 20 SINCE 31-OCT-83 MARTIN HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 05-DEC-83 BLAKE HAS HELD THE POSITIQN OF MANAGER IN DEPT 30 SINCE 11-JUN-84 CLARK HAS HELD THE POSITION OF MANAGER IN DEPT 10 SINCE 14-MAY-84 SCOTT HAS HELD THE POSITION OF ANALYST IN DEPT 20 SINCE 05-MAR-84 KING HAS HELD THE POSITION OF PRESIDENT IN DEPT 10 SINCE 09-JUL-84 TURNER HAS HELD THE POSITION OF SALESMAN IN DEPT 30 SINCE 04-JUN-84 ADAMS HAS HELD THE P0SITION OF CLERK IN DEPT 20 SINCE 04-JUN-84 JAMES HAS HELD THE POSITON OF CLERK IN DEPT 30 SINCE 23-JUL-84 FORD HAS HELD THE POSITION OF ANALYST IN DEPT 20 SINCE 05-DEC-83 MILLER HAS HELD THE P0SITION OF CLERK IN DEPT 10 SINCE 21-NOV-83